import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class FileChunkTest {

    // 文件分块测试
    public static void main(String[] args) throws IOException {
        File sourceFile = new File("D:\\video3.mp4");
        String chunkPath = "D:\\develop\\file_chunk\\";
        File chunkFolder = new File(chunkPath);
        if (!chunkFolder.exists()) {
            chunkFolder.mkdirs();
        }

        // 分块大小
        long chunkSize = 1024 * 1024 * 1;// 1M
        // 分块数量
        long chunkNum = (long) Math.ceil(sourceFile.length() * 1.0 / chunkSize);
        System.out.println("分块数量" + chunkNum);
        // 缓冲区大小
        byte[] b = new byte[1024];
        // 使用RandomAccessFile访问文件, 以只读模式打开源文件
        RandomAccessFile raf_read = new RandomAccessFile(sourceFile, "r");
        // 分块
        for (int i = 0;i < chunkNum;i++) {
            // 创建分块文件
            File file = new File(chunkPath + i);
            if (file.exists()) {
                file.delete();
            }
            boolean newFile = file.createNewFile();
            if (newFile) {
                // 向分块文件中写入数据
                RandomAccessFile raf_writer = new RandomAccessFile(file, "rw");
                int len = -1;
                while ((len = raf_read.read(b)) != -1) {
                    raf_writer.write(b, 0, len);
                    if (file.length() >= chunkSize) {
                        break;
                    }
                }
                raf_writer.close();
                System.out.println("完成分块" + i);
            }
        }

        raf_read.close();

    }

}
